<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // ES5中，每个函数内部都有arguments对象(内置对象)，是一个伪数组，包含函数的实参
        // arguments对象无需声明(无需定义)，可以直接使用
        // arguments表示的是当前函数被调用的时候，接收到的所有参数(实参)列表

        function calc(a,b,c){
            console.log(arguments);//注意的是arguments表示的是函数的实参，不是形参
            // console.log(arguments[0]);
            // arguments.push(999);//报错，arguments对象是不能调用数组中的方法
        }
        // calc(100,200,300);
        calc(1000);
        calc(200,300,400);

        //计算指定数字之和
        function calcSum(){
            console.log(arguments);
            var sum=0;
            for(var i=0;i<arguments.length;i++){
                sum+=arguments[i];
            }
           return sum;
        }
        console.log(calcSum(10,20,30));
        console.log(calcSum(1,3,4,5,8));
        console.log(calcSum(1,3));

        // callee在函数内部使用，代表当前函数的引用(名字)，一般可用于函数内部调用函数本身(递归)
        function calc2(n){
            if(n<=1){
                return 1;
            }
            // return calc2(n-1)*n;
            return arguments.callee(n-1)*n;
        }
        console.log(calc2(2));
        console.log(calc2(4));
    </script>
</head>
<body>
    
</body>
</html>